<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // ES6 新增了`let`关键字，用来声明变量。

        // 语法： let 变量名 = 值;

        let a = 10;
        console.log(a);


        // let特点：
        // 1.不存在变量提升与暂时性死区
        // console.log(b); //ReferenceError: Cannot access 'b' before initialization
        // 在当前作用域下，使用let声明变量，在声明之前就称之为暂时性死区 （25行代码之前就是暂时性死区）
        let b = 100;
        console.log(b); //100


        function fn() {
            // console.log(b); //ReferenceError: Cannot access 'b' before initialization
            let b = 101;
            console.log(b);
        }

        fn();


        // 2.不能重复命名 （不能重复声明）
        let c;
        c = 1000;
        console.log(c);

        // let c;  //SyntaxError: Identifier 'c' has already been declared 标识'c'已经声明过了


        // 3.块级作用域 (可以理解为局部作用域)
        // 只要遇到{}->形成块级作用域
        // if,for,swicth,while...    （对象{}不是） 


        // 也存在作用域链
        let x = 1000
        let y = 2000; {
            // console.log(x); //ReferenceError: Cannot access 'x' before initialization
            let x = 100;
            console.log(x, y); {
                let z = 66;
                console.log(x, y, z);
            }
        }
    </script>
</body>

</html>